package com.edu.exam.enums.grading;

import com.edu.exam.enums.core.BaseEnum;

/**
 * 成绩操作来源枚举
 *
 * 管理成绩记录的操作来源，包括网页端、移动端、接口、批量导入、系统自动等来源
 *
 * @author System
 * @version 1.0.0
 */
public enum GradeOperationSource implements BaseEnum {

    /**
     * 网页端
     */
    WEB("WEB", "网页端"),

    /**
     * 移动端
     */
    MOBILE("MOBILE", "移动端"),

    /**
     * 接口
     */
    API("API", "接口"),

    /**
     * 批量导入
     */
    BATCH_IMPORT("BATCH_IMPORT", "批量导入"),

    /**
     * 系统自动
     */
    SYSTEM_AUTO("SYSTEM_AUTO", "系统自动"),

    /**
     * 管理后台
     */
    ADMIN_CONSOLE("ADMIN_CONSOLE", "管理后台"),

    /**
     * 数据同步
     */
    DATA_SYNC("DATA_SYNC", "数据同步"),

    /**
     * 定时任务
     */
    SCHEDULED_TASK("SCHEDULED_TASK", "定时任务"),

    /**
     * 第三方系统
     */
    THIRD_PARTY("THIRD_PARTY", "第三方系统"),

    /**
     * 文件上传
     */
    FILE_UPLOAD("FILE_UPLOAD", "文件上传"),

    /**
     * 数据迁移
     */
    DATA_MIGRATION("DATA_MIGRATION", "数据迁移");

    private final String code;
    private final String description;

    GradeOperationSource(String code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    /**
     * 从代码创建枚举实例
     *
     * @param code 枚举代码
     * @return 对应的枚举实例
     * @throws IllegalArgumentException 如果代码无效
     */
    public static GradeOperationSource fromCode(String code) {
        for (GradeOperationSource source : values()) {
            if (source.getCode().equals(code)) {
                return source;
            }
        }
        throw new IllegalArgumentException("Unknown GradeOperationSource code: " + code);
    }

    /**
     * 从描述创建枚举实例
     *
     * @param description 枚举描述
     * @return 对应的枚举实例
     * @throws IllegalArgumentException 如果描述无效
     */
    public static GradeOperationSource fromDescription(String description) {
        for (GradeOperationSource source : values()) {
            if (source.getDescription().equals(description)) {
                return source;
            }
        }
        throw new IllegalArgumentException("Unknown GradeOperationSource description: " + description);
    }

    @Override
    public String toString() {
        return description;
    }
}